﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using radnaVerzija.Interfejsi;
using MySql.Data.MySqlClient;

namespace radnaVerzija
{
    partial class DAL
    {
        public class KorisnickiNalogDAO : IDaoCrud<KorisnickiNalog>
        {
            protected MySqlCommand komanda;

            public long create(KorisnickiNalog entitet) { return 0; } //treba ovo vidjeti jos
            public KorisnickiNalog update(KorisnickiNalog entitet) { return entitet; } //i ovo

            public long create(KorisnickiNalog entitet, List<string> _spisakAktivnosti)
            {
                try
                {
                    komanda = new MySqlCommand("insert into KorisnickiNalog values (@datumPlacanja, @daLiJePlaceno, @ukupnaMjesecnaCijena, @idUposlenik, @idKlijent);", konekcija);
                    komanda.Parameters.AddWithValue("@datumPlacanja", entitet.DatumPlacanja);
                    komanda.Parameters.AddWithValue("@daLiJePlaceno", entitet.DaLiJePlaceno);
                    komanda.Parameters.AddWithValue("@ukupnaMjesecnaCijena", entitet.UkupnaMjesecnaCijena);
                    komanda.Parameters.AddWithValue("@idUposlenik", entitet.Recepcionar);
                    komanda.Parameters.AddWithValue("@idKlijent", entitet.KlijentHandle);
                    komanda.ExecuteNonQuery();

                    Int32 trenID = (Int32)komanda.LastInsertedId;
                    List<Int32> _aktivnostiID = new List<Int32>();

                    foreach (string a in _spisakAktivnosti)
                    {
                        komanda = new MySqlCommand("select a.idAktivnost from Aktivnost a, TipAktivnosti ta where a.idTipAktivnosti = ta.idTipAktivnosti and ime = @ime", konekcija);
                        komanda.Parameters.AddWithValue("@ime", a);
                        MySqlDataReader citac = komanda.ExecuteReader();
                        Int32 b = 0;
                        citac.Read();
                        b = citac.GetInt32("idAktivnost");
                        _aktivnostiID.Add(b);
                    }

                    foreach(Int32 a in _aktivnostiID)
                    {
                        komanda = new MySqlCommand("insert into AktivnostiNalogPrelaz values(@idKorisnickiNalog, @idAktivnost);", konekcija);
                        komanda.Parameters.AddWithValue("@idKorisnickiNalog", trenID);
                        komanda.Parameters.AddWithValue("@idAktivnost", a);
                        komanda.ExecuteNonQuery();
                    }

                    return trenID;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public KorisnickiNalog read(KorisnickiNalog entitet)
            {
                try
                {
                    komanda = new MySqlCommand("select * from KorisnickiNalog where idKorisnickiNalog = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@id", entitet.IdNaloga);
                    MySqlDataReader citac = komanda.ExecuteReader();
                    KorisnickiNalog nalog = null;
                    citac.Read();
                    nalog = new KorisnickiNalog(citac.GetInt32("idKorisnickiNalog"), 
                                                citac.GetDateTime("datumPlacanja"),
                                                citac.GetBoolean("daLiJePlaceno"),
                                                citac.GetInt32("ukupnaMjesecnaCijena"),
                                                citac.GetInt32("idUposlenik"),
                                                citac.GetInt32("idKlijent"));
                    return nalog;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public KorisnickiNalog update(KorisnickiNalog entitet, List<string> _spisakAktivnosti)
            {
                try
                {
                    komanda = new MySqlCommand("update KorisnickiNalog set datumPlacanja = @datumPlacanja, daLiJePlaceno = @daLiJePlaceno, ukupnaMjesecnaCijena = @ukupnaMjesecnaCijena, idUposlenik = @idUposlenik, idKlijent = @idKlijent where idKorisnickiNalog = @idNaloga;", konekcija);
                    komanda.Parameters.AddWithValue("@datumPlacanja", entitet.DatumPlacanja);
                    komanda.Parameters.AddWithValue("@daLiJePlaceno", entitet.DaLiJePlaceno);
                    komanda.Parameters.AddWithValue("@ukupnaMjesecnaCijena", entitet.UkupnaMjesecnaCijena);
                    komanda.Parameters.AddWithValue("@idUposlenik", entitet.Recepcionar);
                    komanda.Parameters.AddWithValue("@idKlijent", entitet.KlijentHandle);
                    komanda.Parameters.AddWithValue("@idNaloga", entitet.IdNaloga);
                    komanda.ExecuteNonQuery();

                    komanda = new MySqlCommand("delete from AktivnostNalogPrelaz where idKorisnickiNalog = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@id", entitet.IdNaloga);
                    komanda.ExecuteNonQuery();

                    Int32 trenID = entitet.IdNaloga;
                    List<Int32> _aktivnostiID = new List<Int32>();

                    foreach (string a in _spisakAktivnosti)
                    {
                        komanda = new MySqlCommand("select a.idAktivnost from Aktivnost a, TipAktivnosti ta where a.idTipAktivnosti = ta.idTipAktivnosti and ime = @ime", konekcija);
                        komanda.Parameters.AddWithValue("@ime", a);
                        MySqlDataReader citac = komanda.ExecuteReader();
                        Int32 b = 0;
                        citac.Read();
                        b = citac.GetInt32("idAktivnost");
                        _aktivnostiID.Add(b);
                    }

                    foreach (Int32 a in _aktivnostiID)
                    {
                        komanda = new MySqlCommand("insert into AktivnostiNalogPrelaz values(@idKorisnickiNalog, @idAktivnost);", konekcija);
                        komanda.Parameters.AddWithValue("@idKorisnickiNalog", trenID);
                        komanda.Parameters.AddWithValue("@idAktivnost", a);
                        komanda.ExecuteNonQuery();
                    }



                    return read(entitet);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public void delete(KorisnickiNalog entitet)
            {
                try
                {
                    komanda = new MySqlCommand("delete from KorisnickiNalog where idKorisnickiNalog = @id;", konekcija);
                    komanda.Parameters.AddWithValue("@id", entitet.IdNaloga);
                    komanda.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    }
}
